#include "LabeledValueBox.h"
#include <QLabel>


LabeledValueBox::LabeledValueBox(const QString &title, QWidget *parent) : QWidget(parent), m_title(title)
{
    setObjectName("LabeledValueBox");
    // 设置默认样式
    setupDefaultStyles();

    // 设置组件默认样式
    setStyleSheet(m_defaultBoxStyle);

    // 使用水平布局
    m_layout = new QHBoxLayout(this);
    m_layout->setContentsMargins(0, 0, 0, 0);
    m_layout->setSpacing(6);

    // 标题标签 - 使用 QLabel
    m_titleLabel = new QLabel(title, this);
    m_titleLabel->setStyleSheet(m_defaultLabelStyle);

    // 设置字体大小 - 使用 QFont
    QFont titleFont = m_titleLabel->font();
    titleFont.setPixelSize(10);
    m_titleLabel->setFont(titleFont);

    m_titleLabel->setAlignment(Qt::AlignVCenter | Qt::AlignLeft);

    // 数值标签 - 使用 QLabel
    m_valueLabel = new QLabel("--", this);
    m_valueLabel->setStyleSheet(m_defaultValueStyle);

    // 设置字体大小 - 使用 QFont
    QFont valueFont = m_valueLabel->font();
    valueFont.setPixelSize(12);
    valueFont.setBold(true);
    m_valueLabel->setFont(valueFont);

    m_valueLabel->setAlignment(Qt::AlignVCenter | Qt::AlignRight);
    m_valueLabel->setObjectName(title + "Value");

    // 添加到水平布局
    m_layout->addWidget(m_titleLabel);
    m_layout->addWidget(m_valueLabel);

    // 设置拉伸因子
    m_layout->setStretch(0, 1);
    m_layout->setStretch(1, 2);
}

LabeledValueBox::~LabeledValueBox()
{
}

void LabeledValueBox::setupDefaultStyles()
{
    m_defaultBoxStyle =
        "LabeledValueBox {"
        "  background-color: rgba(30, 30, 30, 120);"
        "  border: 1px solid rgba(100, 100, 100, 100);"
        "  border-radius: 8px;"
        "  padding: 4px 8px;"  // 增加内边距
        "}";

    m_defaultLabelStyle =
        "color: rgba(220, 220, 220, 220);"
        "font-weight: 500;"
        "background: transparent;"
        "border: none;"  // 确保没有边框
        "padding: 0px;"
        "margin: 0px;";

    m_defaultValueStyle =
        "color: rgba(255, 255, 255, 240);"
        "font-weight: bold;"
        "background: transparent;"  // 改为透明背景
        "border: none;"             // 移除边框
        "padding: 0px;"
        "margin: 0px;";
}

QString LabeledValueBox::value() const
{
    return m_valueLabel->text();
}

QString LabeledValueBox::title() const
{
    return m_title;
}

void LabeledValueBox::setValue(const QString &value)
{
    if (m_valueLabel->text() != value)
    {
        m_valueLabel->setText(value);
        Q_EMIT valueChanged(value);
    }
}

void LabeledValueBox::setValue(int value)
{
    setValue(QString::number(value));
}

void LabeledValueBox::setValue(double value, int precision)
{
    setValue(QString::number(value, 'f', precision));
}

void LabeledValueBox::setValue(float value, int precision)
{
    setValue(QString::number(value, 'f', precision));
}

// ========== 样式设置方法 ==========

void LabeledValueBox::setLabelStyle(const QString &styleSheet)
{
    m_titleLabel->setStyleSheet(styleSheet);
}

void LabeledValueBox::setValueStyle(const QString &styleSheet)
{
    m_valueLabel->setStyleSheet(styleSheet);
}

void LabeledValueBox::setBoxStyle(const QString &styleSheet)
{
    setStyleSheet(styleSheet);
}

void LabeledValueBox::setStyles(const QString &labelStyle, const QString &valueStyle, const QString &boxStyle)
{
    if (!labelStyle.isEmpty())
    {
        setLabelStyle(labelStyle);
    }
    if (!valueStyle.isEmpty())
    {
        setValueStyle(valueStyle);
    }
    if (!boxStyle.isEmpty())
    {
        setBoxStyle(boxStyle);
    }
}

// ========== 布局设置方法 ==========

void LabeledValueBox::setSpacing(int spacing)
{
    m_layout->setSpacing(spacing);
}

void LabeledValueBox::setLabelWidth(int width)
{
    m_titleLabel->setFixedWidth(width);
}

void LabeledValueBox::setLabelAlignment(Qt::Alignment alignment)
{
    m_titleLabel->setAlignment(alignment);
}

void LabeledValueBox::setValueAlignment(Qt::Alignment alignment)
{
    m_valueLabel->setAlignment(alignment);
}

// ========== 便捷方法 ==========

void LabeledValueBox::setLabelFontSize(int size)
{
    QFont font = m_titleLabel->font();
    font.setPixelSize(size);
    m_titleLabel->setFont(font);
}

void LabeledValueBox::setValueFontSize(int size)
{
    QFont font = m_valueLabel->font();
    font.setPixelSize(size);
    m_valueLabel->setFont(font);
}

void LabeledValueBox::setLabelColor(const QString &color)
{
    QString style = m_titleLabel->styleSheet();
    style += "color: " + color + ";";
    m_titleLabel->setStyleSheet(style);
}

void LabeledValueBox::setValueColor(const QString &color)
{
    QString style = m_valueLabel->styleSheet();
    style += "color: " + color + ";";
    m_valueLabel->setStyleSheet(style);
}